题解:P12004 【MX-X10-T0】[LSOT-4] 嗯欧哎劈
思路
考虑直接模拟。
可以在读入之后按照题意先计算三个奖项的分数线,再进行判断。
我们定义 fir, sec, thi
分别表示一至三等奖的分数线,那么可以这样进行计算(数组 a
表示所有省的一等奖分数线,因为题目已经写了从大到小进行排序,我们不需要再进行排序了):
1 | fir = a[1]; |
那么如果判断是这样写:
1 | if(x >= fir) |
就会导致一等奖分数线及以上的成绩会同时输出三个奖项的结果(不会输出没得奖的结果是因为不得奖和三等奖的判断条件相反,要么三等奖要么不得奖)。
那么我们可以用到这个:
1 | if(判断条件) // 如果 |
这个代码与下面代码:
1 | if(判断条件) // 如果 |
区别在于,第一个代码会按顺序判断,一旦满足 if
中的条件,则会停止后面的判断。
而第二个代码一旦满足其中的条件,并不会停止判断,而是继续判断下面的语句。
这样如果满足一等奖的判断语句,就不会继续判断二等奖了。
插一句,如果你这样写:if(x >= fir) return cout << "sidekick" << endl, 0;
,即输出之后结束程序也是可以的,这样也可以不用 else if
。
同理,如果二等奖与三等奖成绩相同,因为先判断二等奖,满足二等奖条件输出之后直接结束判断,所以不会影响三等奖。
代码
1 |
|